package org.baderlab.csplugins.enrichmentmap.style.charts.json;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
public class PropertiesJsonSerializer extends JsonSerializer<Map<String, Object>> {
@Override
public void serialize(final Map<String, Object> map, final JsonGenerator jgen, final SerializerProvider provider)
throws IOException, JsonProcessingException {
// Start
jgen.writeStartObject();
// Write properties
for (final Entry<String, Object> entry : map.entrySet()) {
final String key = entry.getKey();
final Object value = entry.getValue();
if (key != null && value != null) {
if (value.getClass().isArray()) {
int length = Array.getLength(value);
jgen.writeArrayFieldStart(key);
for (int i = 0; i < length; i++)
jgen.writeObject(Array.get(value, i));
jgen.writeEndArray();
} else if (value instanceof Collection) {
jgen.writeArrayFieldStart(key);
for (final Object v : (Collection<?>)value)
jgen.writeObject(v);
jgen.writeEndArray();
} else {
jgen.writeFieldName(key);
jgen.writeObject(value);
}
}
}
// End
jgen.writeEndObject();
}
@Override
public Class handledType() {
return Map.class;
}
}